//
// Created by 梦小星 on 2021/10/24.
// @author 梦小星 https://mengxiaoxing.top
// @mail mengxingcn@aliyun.com
//
#include "SqList.h"
/*
 * 删除有序顺序表中所有小于min大于max的值
 * */
bool delMinMax(SqList &list, ElemType min, ElemType max) {
    if (min>=max||list.length==0) return false;
//    从表头开始查找小于等于最小值的元素位序
    int minPos=0;
    for (int i = 0; i < list.length; ++i) {
        if (list.data[i]<=min)minPos++;
    }
    if (minPos>=list.length)return false;
//    从表尾开始查找大于等于最大值的元素位序
    int maxPos=list.length;
    for (int i = maxPos-1;  i> minPos; --i) {
        if (list.data[i]>=max)maxPos--;
    }
    while (maxPos<list.length){
        list.data[minPos]=list.data[maxPos];
        minPos++;
        maxPos++;
    }
    list.length=minPos;
    return true;
}

//题目四：删除有序的顺序表的值【s，t】的元素
bool deleteS_T(SqList &l, int s, int t) {
    if (s >= t) {
        return false;
    }
    if (l.length == 0) {
        return false;
    }
    if ((s >= l.data[0] && s <= l.data[l.length - 1]) && (t >= l.data[0] && t <= l.data[l.length - 1])) {
        //如果s和t都在数组值的范围内 时候删除元素
        //利用上面的方法 有种伪造数组的感觉
        int k = 0;
        for (int i = 0; i < l.length; ++i) {
            if (l.data[i] < s || l.data[i] > t) {
                l.data[k] = l.data[i];
                k++;
            }
        }
        l.length = k;
    }
    return true;
}